package com.example.travelplan.app.dominio;

import java.util.ArrayList;
import java.util.Date;
import java.util.Map;
import java.util.List;
import java.util.HashMap;
import java.text.SimpleDateFormat;

/**
 * Created by alto on 19/06/2014.
 */

public class BDados {

    private Map<Integer,TipoLugar> m_conjuntoTipoLugar;
    private Map<Integer,Lugar> m_conjuntoLugar;
    private Map<Integer,Cidade> m_conjuntoCidade;

    BDados(){
        m_conjuntoTipoLugar = new HashMap<Integer, TipoLugar>();
        m_conjuntoLugar = new HashMap<Integer, Lugar>();
        m_conjuntoCidade = new HashMap<Integer, Cidade>();
        preencherMapTipoLugar();
        preencherMapLugar();
        preencherMapCidade();
    }


    public Map<Integer, TipoLugar> getM_conjuntoTipoLugar() {
        if(m_conjuntoTipoLugar.isEmpty())
            preencherMapTipoLugar();

        return m_conjuntoTipoLugar;
    }

    public TipoLugar getTipoLugar(Integer _id) {
        if(m_conjuntoTipoLugar.isEmpty())
            preencherMapTipoLugar();

        return m_conjuntoTipoLugar.get(_id);
    }

    public void setM_conjuntoTipoLugar(Map<Integer, TipoLugar> m_conjuntoTipoLugar) {
        this.m_conjuntoTipoLugar = m_conjuntoTipoLugar;
    }

    public Map<Integer, Lugar> getM_conjuntoLugar() {

        if(m_conjuntoLugar.isEmpty())
            preencherMapLugar();

        return m_conjuntoLugar;
    }

    // obtém lugares dado o id da cidade em questão.
    public List<Lugar> getM_conjuntoLugar(Integer _idCidade) {

        if(m_conjuntoLugar.isEmpty())
            preencherMapLugar();

       List< Lugar> conjLugar = new ArrayList<Lugar>();

        for (Lugar value : m_conjuntoLugar.values()) {

            if (value.getM_idCidade() == _idCidade) {
                conjLugar.add(value);
            }
        }
        return conjLugar;
    }

    public Lugar getLugar(Integer _id) {
        if(m_conjuntoLugar.isEmpty())
            preencherMapLugar();

        return m_conjuntoLugar.get(_id);
    }

    public void setM_conjuntoLugar(Map<Integer, Lugar> m_conjuntoLugar) {
        this.m_conjuntoLugar = m_conjuntoLugar;
    }

    public Map<Integer, Cidade> getM_conjuntoCidade() {
        if(m_conjuntoCidade.isEmpty())
            preencherMapCidade();

        return m_conjuntoCidade;
    }

    public Cidade getCidade(Integer _id) {
        if(m_conjuntoCidade.isEmpty())
            preencherMapCidade();

        return m_conjuntoCidade.get(_id);
    }

    public void setM_conjuntoCidade(Map<Integer, Cidade> m_conjuntoCidade) {
        this.m_conjuntoCidade = m_conjuntoCidade;
    }


    private void preencherMapTipoLugar() {

        Integer id = 1;
        m_conjuntoTipoLugar.put(id, new TipoLugar(id,"Praia"));
        id++;
        m_conjuntoTipoLugar.put(id, new TipoLugar(id,"Teatro")); //2
        id++;
        m_conjuntoTipoLugar.put(id, new TipoLugar(id,"Museu"));//3
        id++;
        m_conjuntoTipoLugar.put(id, new TipoLugar(id,"Festa"));//4
        id++;
        m_conjuntoTipoLugar.put(id, new TipoLugar(id,"Praça"));//5
        id++;
        m_conjuntoTipoLugar.put(id, new TipoLugar(id,"Cachoeira"));//6
        id++;
        m_conjuntoTipoLugar.put(id, new TipoLugar(id,"Trilhas"));//7
        id++;
        m_conjuntoTipoLugar.put(id, new TipoLugar(id,"Bares"));//8
        id++;
        m_conjuntoTipoLugar.put(id, new TipoLugar(id,"Parque"));//9
    }

    private void preencherMapLugar() {
        Integer id = 1;

        // paraty
        m_conjuntoLugar.put(id,new Lugar(id,1,"Saco da Velha","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,1,"Conceição","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,1,"Lula","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,1,"Vermelha","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,1,"Santa Rita","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,1,"Baré","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,1,"Engenho D’Água","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,1,"Bom Jardim","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,1,"Joaninho","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,1,"Boa Vista","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,1, "Tobogã","teste imagem", 6));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,1, "Pedra Branca","teste imagem", 6));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,1, "Paraty 33","teste imagem", 8));

        //angra
        m_conjuntoLugar.put(id,new Lugar(id,2,"Égua","teste imagem", 1)); //14
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,2,"Monsuaba","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,2,"Paraíso","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,2,"Tartaruga","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,2,"Coqueiro","teste imagem", 1)); //18
        id++;


        //curitiba
        m_conjuntoLugar.put(id,new Lugar(id,3,"Jardim Botânico","teste imagem", 5)); // 19
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,3,"Rua XV de Novembro ","teste imagem", 5));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,3,"Centro Cívico","teste imagem", 3));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,3,"Oscar Niemeyer ","teste imagem", 3));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,3,"Ópera de Arame","teste imagem", 2));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,3,"Tanguá","teste imagem", 9));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,3,"turistico 7","teste imagem", 5));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,3,"turistico 8","teste imagem", 5));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,3,"turistico 9","teste imagem", 5));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,3,"turistico 10","teste imagem", 5)); //28
        id++;

        //maceio
        m_conjuntoLugar.put(id,new Lugar(id,4,"Gunga","teste imagem", 1)); // 29
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,4,"Francês","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,4,"Pajuçara","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,4,"Ponta Verde ","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,4,"Ipioca","teste imagem", 1));
        id++;
        m_conjuntoLugar.put(id,new Lugar(id,4,"Carro Quebrado","teste imagem", 1));
        id++;

    }

    private void preencherMapCidade() {
        Integer id = 1;
        String descricao = "Paraty é um município brasileiro do estado do Rio de Janeiro. Localizado no litoral sul do estado, dista 258 quilômetros da capital, a cidade do Rio de Janeiro. Em 1667, teve sua emancipação política decretada após várias revoltas populares contra o centralismo que Angra dos Reis exercia sobre a cidade, em especial após a revolta liderada por Domingos Gonçalves de Abreu, tornando-se assim independente.";
        String diretorioImagem = "cidadeparaty.png";
        m_conjuntoCidade.put(id, new Cidade(id, "Paraty", descricao, diretorioImagem));

        id++;
        descricao = "Angra dos Reis é um município brasileiro situado no sul do estado do Rio de Janeiro. Localiza-se a uma altitude média de seis metros e possui, em seu litoral, 365 ilhas. Antes da chegada dos europeus, era habitada por tribos indígenas tupinambás. Foi descoberta pelos portugueses em 6 de janeiro de 1502, sendo colonizada apenas a partir de 1556. Sua população, aferida no Censo de 2010, era de 169 270 habitantes.";
        diretorioImagem = "cidadeangra.png";
        m_conjuntoCidade.put(id, new Cidade(id, "Angra", descricao, diretorioImagem));

        id++;
        descricao = "Curitiba é um município brasileiro, capital do estado do Paraná, localizada a 934 metros de altitude no primeiro planalto paranaense, a aproximadamente 110 quilômetros do Oceano Atlântico.11 É a oitava cidade mais populosa do Brasil e a maior do sul do país, com uma população de 1.848.946 habitantes.";
        diretorioImagem = "cidadecuritiba.png";
        m_conjuntoCidade.put(id, new Cidade(id, "Curitiba", descricao, diretorioImagem));

        id++;
        descricao = "Localizada em um ambiente totalmente litorâneo, Maceió destaca-se pela sua beleza exuberante. Encravada entre os coqueiros, mangues e um belíssimo mar, proporciona a todos que a visitam lindas recordações. Hoje, com aproximadamente um milhão de habitantes, é um dos mais belos pólos turísticos do Brasil, triplicando sua população na temporada de férias. ";
        diretorioImagem = "cidademaceio.png";
        m_conjuntoCidade.put(id, new Cidade(id, "Maceió", descricao, diretorioImagem));

    }

    private Date getDataDiaHora(String _data){
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm");

        Date data = null;
        try {
            data = sdf.parse(_data);
        }
        catch (Exception e) {
           data = new Date();
        }

        return data;
    }

    private Date getDataDia(String _data){
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

        Date data = null;
        try {
            data = sdf.parse(_data);
        }

        catch (Exception e) {
            data = new Date();
        }

        return data;
    }

    public Map<Integer,Roteiro> preencherMapRoteiroDefault(){

        Map<Integer,Roteiro> mapRoteiros = new HashMap<Integer, Roteiro>();
        Integer id = 1;
        Integer idDia = 1;
        Integer idAtividade = 1;

        Map<Integer,Dia> mapaDias = new HashMap<Integer, Dia>();

        Map<Integer,Atividade> dia1Atividades = new HashMap<Integer, Atividade>();

        dia1Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("10/07/2015 09:00"),m_conjuntoLugar.get(1)));
        idAtividade++;
        dia1Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("10/07/2015 14:00"),m_conjuntoLugar.get(2)));
        idAtividade++;
        dia1Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("10/07/2015 17:00"),m_conjuntoLugar.get(4)));
        idAtividade++;

        Dia dia1 = new Dia(idDia++,getDataDia("10/07/2015"),dia1Atividades);

        Map<Integer,Atividade> dia2Atividades = new HashMap<Integer, Atividade>();
        dia2Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("11/07/2015 09:00"),m_conjuntoLugar.get(3)));
        idAtividade++;
        dia2Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("11/07/2015 14:00"),m_conjuntoLugar.get(11)));
        idAtividade++;
        dia2Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("11/07/2015 17:00"),m_conjuntoLugar.get(9)));
        idAtividade++;
        Dia dia2 = new Dia(idDia++,getDataDia("11/07/2015"),dia2Atividades);


        Map<Integer,Atividade> dia3Atividades = new HashMap<Integer, Atividade>();
        dia3Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("12/07/2015 09:00"),m_conjuntoLugar.get(5)));
        idAtividade++;
        dia3Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("12/07/2015 14:00"),m_conjuntoLugar.get(12)));
        idAtividade++;
        dia3Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("12/07/2015 14:00"),m_conjuntoLugar.get(7)));
        Dia dia3 = new Dia(idDia++,getDataDia("12/07/2015"),dia3Atividades);


        mapaDias.put(dia1.getM_id(), dia1);
        mapaDias.put(dia2.getM_id(), dia2);
        mapaDias.put(dia3.getM_id(), dia3);

        Roteiro roteiro = new Roteiro(id,m_conjuntoCidade.get(1),false,getDataDia("10/07/2015"),getDataDia("12/07/2015"));
        roteiro.setM_conjuntoDias(mapaDias);

        mapRoteiros.put(id,roteiro);
        criarRoteiroCuritiba(mapRoteiros);
        criarRoteiroAngra(mapRoteiros);
        criarRoteiroMaceio(mapRoteiros);

        return mapRoteiros;
    }

    public void criarRoteiroCuritiba(Map<Integer,Roteiro> mapRoteiros){
        Integer id = 2;
        Integer idDia = 1;
        Integer idAtividade = 1;

        Map<Integer,Dia> mapaDias = new HashMap<Integer, Dia>();

        Map<Integer,Atividade> dia1Atividades = new HashMap<Integer, Atividade>();

        dia1Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("10/05/2014 09:00"),m_conjuntoLugar.get(19)));
        idAtividade++;
        dia1Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("10/05/2014 14:00"),m_conjuntoLugar.get(20)));
        idAtividade++;
        dia1Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("10/05/2014 17:00"),m_conjuntoLugar.get(21)));
        idAtividade++;

        Dia dia1 = new Dia(idDia++,getDataDia("10/05/2014"),dia1Atividades);

        Map<Integer,Atividade> dia2Atividades = new HashMap<Integer, Atividade>();
        dia2Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("11/05/2014 09:00"),m_conjuntoLugar.get(22)));
        idAtividade++;
        dia2Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("11/05/2014 14:00"),m_conjuntoLugar.get(23)));
        idAtividade++;
        dia2Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("11/05/2014 17:00"),m_conjuntoLugar.get(24)));
        idAtividade++;
        Dia dia2 = new Dia(idDia++,getDataDia("11/05/2014"),dia2Atividades);


        Map<Integer,Atividade> dia3Atividades = new HashMap<Integer, Atividade>();
        dia3Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("12/05/2014 09:00"),m_conjuntoLugar.get(25)));
        idAtividade++;
        dia3Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("12/05/2014 14:00"),m_conjuntoLugar.get(26)));
        idAtividade++;
        dia3Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("12/05/2014 14:00"),m_conjuntoLugar.get(27)));
        Dia dia3 = new Dia(idDia++,getDataDia("12/05/2014"),dia3Atividades);


        mapaDias.put(dia1.getM_id(), dia1);
        mapaDias.put(dia2.getM_id(), dia2);
        mapaDias.put(dia3.getM_id(), dia3);

        Roteiro roteiro = new Roteiro(id,m_conjuntoCidade.get(3),true,getDataDia("10/05/2014"),getDataDia("12/05/2014"));
        roteiro.setM_conjuntoDias(mapaDias);
        roteiro.setM_bFavorito(true);

        mapRoteiros.put(id,roteiro);
    }

    public void criarRoteiroAngra(Map<Integer,Roteiro> mapRoteiros){
        Integer id = 3;
        Integer idDia = 1;
        Integer idAtividade = 1;

        Map<Integer,Dia> mapaDias = new HashMap<Integer, Dia>();

        Map<Integer,Atividade> dia1Atividades = new HashMap<Integer, Atividade>();

        dia1Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("10/04/2014 09:00"),m_conjuntoLugar.get(14)));
        idAtividade++;
        dia1Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("10/04/2014 14:00"),m_conjuntoLugar.get(15)));
        idAtividade++;
        dia1Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("10/04/2014 17:00"),m_conjuntoLugar.get(16)));
        idAtividade++;

        Dia dia1 = new Dia(idDia++,getDataDia("10/05/2014"),dia1Atividades);

        Map<Integer,Atividade> dia2Atividades = new HashMap<Integer, Atividade>();
        dia2Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("11/04/2014 09:00"),m_conjuntoLugar.get(17)));
        idAtividade++;
        dia2Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("11/04/2014 14:00"),m_conjuntoLugar.get(18)));
        idAtividade++;
        dia2Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("11/04/2014 17:00"),m_conjuntoLugar.get(14)));
        idAtividade++;
        Dia dia2 = new Dia(idDia++,getDataDia("11/05/2014"),dia2Atividades);

        mapaDias.put(dia1.getM_id(), dia1);
        mapaDias.put(dia2.getM_id(), dia2);

        Roteiro roteiro = new Roteiro(id,m_conjuntoCidade.get(2),false,getDataDia("10/04/2014"),getDataDia("11/04/2014"));
        roteiro.setM_conjuntoDias(mapaDias);

        mapRoteiros.put(id,roteiro);
    }

    public void criarRoteiroMaceio(Map<Integer,Roteiro> mapRoteiros) {
        Integer id = 4;
        Integer idDia = 1;
        Integer idAtividade = 1;

        Map<Integer,Dia> mapaDias = new HashMap<Integer, Dia>();

        Map<Integer,Atividade> dia1Atividades = new HashMap<Integer, Atividade>();

        dia1Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("10/08/2014 09:00"),m_conjuntoLugar.get(29)));
        idAtividade++;
        dia1Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("10/08/2014 14:00"),m_conjuntoLugar.get(30)));
        idAtividade++;
        dia1Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("10/08/2014 17:00"),m_conjuntoLugar.get(31)));
        idAtividade++;

        Dia dia1 = new Dia(idDia++,getDataDia("10/08/2014"),dia1Atividades);

        Map<Integer,Atividade> dia2Atividades = new HashMap<Integer, Atividade>();
        dia2Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("11/08/2014 09:00"),m_conjuntoLugar.get(32)));
        idAtividade++;
        dia2Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("11/08/2014 14:00"),m_conjuntoLugar.get(33)));
        idAtividade++;
        dia2Atividades.put(idAtividade,new Atividade(idAtividade,getDataDiaHora("11/08/2014 17:00"),m_conjuntoLugar.get(29)));
        idAtividade++;
        Dia dia2 = new Dia(idDia++,getDataDia("11/08/2014"),dia2Atividades);

        mapaDias.put(dia1.getM_id(), dia1);
        mapaDias.put(dia2.getM_id(), dia2);

        Roteiro roteiro = new Roteiro(id,m_conjuntoCidade.get(4),false,getDataDia("10/08/2014"),getDataDia("11/08/2014"));
        roteiro.setM_conjuntoDias(mapaDias);

        mapRoteiros.put(id,roteiro);
    }
}
